﻿using DAL;
using EntitiesLayer;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DAL.Repositorios;
using EntitiesLayer;
using System.Drawing;

namespace BLL
{
    public class GestorMantenimientoEjercicios
    {
        private GestorMantMusculos gestorM;
        


        public GestorMantenimientoEjercicios() {

            gestorM = new GestorMantMusculos();
        }
        public IEnumerable<Ejercicio> ListarEjercicios() {

            return UnitOfWork.RepositoryEjercicio.GetAll();
        }

        public Ejercicio GetById(int id) {

            return UnitOfWork.RepositoryEjercicio.GetById(id);
        }

        public void registrarEjercicio(string pnombre, string pnombre2,
            string pposini, string pposfin, string pindicaciones,
            string perrores, IList<long>idsMusculosP, IList<long> idsMusculosS)
        {

            Ejercicio ejercicio = new Ejercicio(pnombre, pnombre2,pposini, 
                pposfin, pindicaciones,perrores);

            UnitOfWork.RepositoryEjercicio.Insert(ejercicio);

            UnitOfWork.RepositoryEjercicio.ActionAfterSave +=
                () =>
                {
                    long idEjercicio = UnitOfWork.RepositoryEjercicio.IdAutoGenerados[ejercicio];
                    //puede que lo cambie a arreglo 
                    gestorM.AsignarMuchosMusculosP(idEjercicio, idsMusculosP.ToArray(), false);
                    gestorM.AsignarMuchosMusculosS(idEjercicio, idsMusculosS.ToArray(), false);
                };

            
        }


        public IList<Ejercicio> listarReposiotriosRandomPorUbicacion() {

            return UnitOfWork.RandomRepoEjercicio.getRandoms();
        }

        public void eliminarEjercicio(int idEjercicio) {

            UnitOfWork.RepositoryEjercicio.Delete(new Ejercicio(idEjercicio));

        }

        public void ModificarEjercicio(int id, string pnombre, string pnombre2,
            string pposini, string pposfin, string pindicaciones,
            string perrores)
        {
            Ejercicio ejercicio = new Ejercicio(pnombre, pnombre2,
                pposini, pposfin, pindicaciones,
                perrores, id);

            UnitOfWork.RepositoryEjercicio.Update(ejercicio);
            
        
        }

        public void RegistrarImagen(int idEjercicio, Bitmap bitmap, string descripcion) {

            UnitOfWork.RepositoryImagenes.Insert(new Imagen(idEjercicio, bitmap, descripcion));
        }

        public void ModificarImagen(int idEjercicio, string descripcion)
        {

            UnitOfWork.RepositoryImagenes.Insert(new Imagen(idEjercicio, descripcion));
        }

        public void EliminarImagen(int idImagen) {

            UnitOfWork.RepositoryImagenes.Delete(new Imagen(idImagen));
        }

        public IList<Imagen> ConsultarImagenesEjercicio(int idEjercicio) {

            Ejercicio ejercicio = UnitOfWork.RepositoryEjercicio.GetById(idEjercicio);

            if (ejercicio != null)
                return ejercicio.ListaImagenes;

            return null;
        }

        public void guardarCambiosEjercicios() {

            UnitOfWork.RepositoryEjercicio.Save();
        }

        public void guardarCambiosImagenes() {

            UnitOfWork.RepositoryImagenes.Save();
        }
    }
}
